Загальна структура
==================

Грунтуючись на аналізі вимог, ми вирішили використовувати для зберігання даних нашого додатку наступні таблиці:

 * `tbl_user` зберігає інформацію користувача, включаючи імʼя користувача та пароль;
 * `tbl_post` зберігає інформацію про записи блогу:
	 - `title`: необхідно, заголовок запису;
	 - `content`: необхідно, вміст запису у [форматі Markdown](http://daringfireball.net/projects/markdown/syntax);
	 - `status`: необхідно, статус запису. Може приймати значення:
		 * 1: запис знаходиться у чорновому варіанті та прихований від читачів;
		 * 2: запис опубліковано;
		 * 3: запис із закінченим терміном дії: не публікується в загальному списку, але все ще доступний окремо.
	 - `tags`: опціонально. Список розділених комою тегів, які відносять запис до тієї чи іншої категорії;
 * `tbl_comment` зберігає інформацію про коментарі. Кожен коментар асоціюється із деяким записом і містить наступні поля:
	 - `author`: необхідно, імʼя автора;
	 - `email`: необхідно, email автора;
	 - `url`: опціонально, адреса веб-сайту автора;
	 - `content`: необхідно, текст коментаря у текстовому форматі;
	 - `status`: необхідно, статус коментаря, який показує, затверджений коментар (значення 2) чи ні (значення 1);
 * `tbl_tag` зберігає інформацію про теги записів та їх кількості. Використовується для побудови хмари тегів. Таблиця містить наступні поля:
 	 - `name`: необхідно, унікальне імʼя тега;
 	 - `frequency`: необхідно, кількість використань тега у записах.
 * `tbl_lookup` зберігає інформацію про текстові синоніми цілочисельних даних (кодів).
    Коди використовуються при розробці, синоніми безпосередньо відображаються користувачам. 
    Наприклад, ми використовуємо ціле число 1 для позначення чорнового статусу запису і рядок `Чернетка`, яку ми відображаємо користувачам. 
    Таблиця містить наступні поля:
 	 - `name`: текстове представлення даних, що відображається користувачеві;
 	 - `code`: цілочисельне представлення даних;
 	 - `type`: тип даних;
 	 - `position`: порядковий номер для даних одного типу.

Наступна діаграма сутність-звʼязок (ER) показує структуру таблиць і звʼязків між ними.

![Діаграма сутність-звʼязок БД системи управління блогом](schema.png)


> Info|Інформація: Ми називаємо всі таблиці та їх поля у нижньому регістрі, так як різні СУБД сприймають регістр по-різному.
>
> Також ми використовуємо префікс `tbl_`. Зроблено це із двох причин. 
> По-перше, префікс дозволяє зберігати дані декількох додатків в одній БД, що часто доводиться робити в умовах віртуального хостингу. 
> По-друге, використання префіксів зменшує ймовірність збігу імен таблиць із зарезервованими ключовими словами СУБД.

SQL, відповідний ER-діаграмі вище, ви можете знайти у [демо-блозі](http://www.yiiframework.com/demos/blog/).
У встановленій копії фреймворку вони знаходяться у файлі `/wwwroot/yii/demos/blog/protected/data/schema.sqlite.sql`.

Ми розділили розробку нашого додатку на кілька основних етапів:

 * Етап 1: створення прототипу системи керування блогом. Він повинен містити більшу частину необхідної функціональності;
 * Етап 2: управління записами: створення, видалення, відображення записів списком, відображення окремого запису;
 * Етап 3: управління коментарями: створення, оновлення, видалення, відображення списком і ствердження коментарів до записів;
 * Етап 4: реалізація портлетів: меню користувача, форми входу, хмари тегів і недавніх коментарів;
 * Етап 5: фінальна оптимізація і розгортання.